package kgame5.kengine.gameunit.parts.kfsm {
import kgame5.k3d.core.math.Vector3D;
import kgame5.k3d.core.obj3d.hardvo.HardVO;
import kgame5.kutil.SafeTimer;

/**
 * @author kangkai
 * TODO 这个通过fsm发送event到GameActor.理由是减少GameActor暴露的接口
 */
public class GState {
	//______________Property____________________
	private var ID:int=-1;
	
	protected var fsm:FSM;// 对外发出事件，通知GameActor而用
	
	protected var timer:SafeTimer=new SafeTimer();//安全的计时器，非常常用
	
	protected var _vo:Object;//数据结构
	protected var hardVO:HardVO;//刚体数据
	
	
	protected var v:Vector3D;//速度
	protected var r:Vector3D;//位置
	protected var p:Vector3D;//角度
	//________________Method____________________
	public function GState(id:int){
		//其实stateID都是唯一的和一个State的子类对应，所以stateID是在State类声明的时候就自带的， 可以不靠外界传入
		this.ID=id;
		//T.p(ID);
	}
	
	public function getID():int{
		return ID;
	}
	
	public function setFSM(fsm:FSM):void{
		this.fsm=fsm;
	}
	
	
	
	public function setVO(p_vo:Object):void{
		this._vo=p_vo;
	}
	
	public function setHardVO(hardVO:HardVO):void{
		this.hardVO=hardVO;
		
		v= hardVO.v3d_v;
		p= hardVO.v3d_p;
		r= hardVO.v3d_r;
	}
	
	//进入状态,info很重要，在进入一个状态的时候被传入的参数，比如如果是进入移动状态，则要传入移动目的地
	public function enter(info:Object=null):void{}
	//执行状态
	public function update():void{}
	//退出状态
	public function exit():void{}
}//end of class
}